// baseDTO
import { IsNotEmptyArray } from '@/validates/classValidator/IsNotEmptyArray';
import { IsPositvieNumber } from '@/validates/classValidator/IsPositvieNumber';
import { ApiProperty } from '@nestjs/swagger';
import {
  IsArray,
  IsIn,
  IsInt,
  IsNotEmpty,
  IsPositive,
  IsString,
} from 'class-validator';

/**
 *  pageSize  一页显示几个
 *  pageNumber 第几页
 *  
 */
export class pageOrSortDto {
  @ApiProperty({ example: 5, required: false })
  pageSize: number;

  @ApiProperty({ example: 1, required: false })
  pageNumber: number;

  // @IsNotEmpty({ message: 'field 不能为空' })
  @ApiProperty({ example: 'id', required: false })
  field: string;

  // @IsNotEmpty({ message: 'sort 不能为空' })
  @ApiProperty({ example: 'DESC', required: false })
  sort: string;
}

/**
 * 此idDto  用于Get(包括params,query)方法时参数获取
 */
export class idByGetDto {
  @IsNotEmpty({ message: 'id 不能为空' })
  @IsPositvieNumber({ message: '需要为非0正整数' })
  @ApiProperty({ example: 20 })
  id: number;
}

/**
 * 此idDto  用于Post方法时参数获取
 */
export class idByPostDto {
  @IsNotEmpty({ message: 'id 不能为空' })
  @IsInt({ message: 'id需要是整数' })
  @IsPositive({ message: 'id需要是正数' })
  @ApiProperty({ example: 20 })
  id: number;
}

export class setStateDto extends idByPostDto {
  @IsNotEmpty({ message: 'state不能为空' })
  @IsInt({ message: '需要是整数' })
  @IsPositive({ message: 'id需要是正数' })
  @IsIn([0, 1], { message: '只能是0或者1' })
  @ApiProperty({ example: 0 })
  state: number;
}

export class idsArrayDto {
  @IsNotEmpty({ message: '不能为空' })
  @IsArray({ message: '需要是数组' })
  @IsNotEmptyArray({ message: '不能是空数组' })
  @IsInt({ each: true, message: '数组每项必须是整数' })
  @IsPositive({ each: true, message: '数组每项必须是正数' })
  @ApiProperty({ example: [17, 18] })
  ids: Array<number>;
}

/**
 * 条件查询
 *
 */
export class getManyByFiledDto extends pageOrSortDto {
  @IsNotEmpty({ message: 'field 不能为空' })
  @IsString({ message: 'field 需要是字符串' })
  @ApiProperty({ example: 'who', required: true })
  field: string;

  @IsNotEmpty({ message: 'value 不能为空' })
  @IsString({ message: 'value 需要是字符串' })
  @ApiProperty({ example: 'admin', required: true })
  value: string;

  @ApiProperty({ example: '=', required: false })
  condition?: string;
}

/**
 * 搜索
 *
 */
export class likeDto {
  @ApiProperty({ example: 5, required: false })
  pageSize: number;

  @ApiProperty({ example: 1, required: false })
  pageNumber: number;

  @IsNotEmpty({ message: 'field 不能为空' })
  @IsString({ message: 'field 需要是字符串' })
  @ApiProperty({ example: 'who', required: true })
  field: string;

  @IsNotEmpty({ message: 'value 不能为空' })
  @IsString({ message: 'value 需要是字符串' })
  @ApiProperty({ example: 'xx', required: true })
  value: string;
}
